import { AES } from "./AES";
const iv = "";

export default class AesManager {

    //加密
    /*
    * {param} crytoJsKey 秘钥
    * {param} plaintText 加密明文
    * return  str 加密结果
    */
    public static encrypt(cryptoJsKey: string, plaintText: string): string {
        // var plaintText = plaintText;
        // var options = {
        //     iv: CryptoJS.enc.Utf8.parse(iv),
        //     mode: CryptoJS.mode.CBC,
        //     padding: CryptoJS.pad.PKCS7
        // };
        // var key = CryptoJS.enc.Utf8.parse(cryptoJsKey);
        // var encryptedData = CryptoJS.AES.encrypt(plaintText, key, options);
        // var encryptedBase64Str = encryptedData.toString();
        // return encryptedBase64Str;


        // let encryptedData = CryptoJS.AES.encrypt(src, key, {
        //     mode: CryptoJS.mode.ECB,
        //     padding: CryptoJS.pad.PKCS7
        //   });
        const options = {
            mode: 'cbc', // cbc(default)/ecb/cfb
            iv: cryptoJsKey, // Uint8Array[16](default) | string : length is 16
            padding: 'pkcs5', //only pkcs5(default)
            output: 'base64', //base64(default)/binary/hex
        };
        const out = AES.create(cryptoJsKey, options).encString(plaintText);
        return out

    }
    //解密
    /*
    * {param} crytoJsKey 秘钥
    * {param} plaintText 解密密文
    
    * return  str 解密结果
*/
    public static decrypt(cryptoJsKey: string, encryptedBase64Str: string): string {
        // var encryptedBase64Str = encryptedBase64Str;
        // var options = {
        //     mode: CryptoJS.mode.CBC,
        //     // padding: CryptoJS.pad.PKCS7
        //     padding: CryptoJS.pad.PKCS7
        // };
        // var key = CryptoJS.enc.Utf8.parse(cryptoJsKey);
        // // 解密
        // var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, options);
        // // 解密后，需要按照Utf8的方式将明文转位字符串
        // var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);
        // return decryptedStr;
        // console.log("decrypt", encryptedBase64Str);
        // var bytes = CryptoJS.AES.decrypt(encryptedBase64Str, cryptoJsKey, {
        //     //iv: key,
        //     mode: CryptoJS.mode.CBC,
        //     padding: CryptoJS.pad.PKCS7
        // });
        // console.log("decrypt", bytes);
        // var decryptResult = bytes.toString(CryptoJS.enc.Utf8);
        // console.log("decrypt", decryptResult);
        // return decryptResult.toString();
        const options = {
            mode: 'cbc', // cbc(default)/ecb/cfb
            iv: cryptoJsKey, // Uint8Array[16](default) | string : length is 16
            padding: 'pkcs5', //only pkcs5(default)
            output: 'base64', //base64(default)/binary/hex
        };
        const out = AES.create(cryptoJsKey, options).decString(encryptedBase64Str);
        return out;
    }
};
